#!/bin/bash

#兼容LinuxLF换行格式
#sed -i 's/\r$//' test_Auto_command.sh

# 从命令行参数获取user_number
module=$1
thread=$2
runtime=$3

# 指定目录-使用根目录避免冗余
basics="/Performance"

# 设置可执行文件的路径（可以切换为自己的安装目录）	
JMETER_HOME="/opt/apache-jmeter-5.1.1"

# 设置JMX脚本文件路径
JMX_FILE="$basics/code/Company.jmx"

# 定义基础路径和序列号文件位置（ “_ ” 后面放入时间，保证每次执行的数据不重复，方便查看）
base_report_path="$basics/report/port_"
base_html_path="/data/jenkins-slave/workspace/testing/Xm_Auto_Perf"
base_log_path="$basics/log/port_"
seq_file="$basics/shell/port_seq.txt"
date_file="$basics/shell/port_date.txt"

# 获取当前日期，格式为YYYY-MM-DD
current_date=$(date +%Y-%m-%d)
 
# 初始化序列号（整形数字，但格式化为字符串时显示为001）
default_seq=1  # 作为整形数字存储
default_seq_formatted="001"  # 作为格式化后的字符串显示
 
# 检查日期文件是否存在并读取日期
if [ -f "$date_file" ]; then
    file_date=$(cat "$date_file")
else
    file_date=""
fi
 
# 检查序列号文件是否存在并读取序列号
if [ ! -f "$seq_file" ]; then
    # 文件不存在，创建并写入默认值（整形数字1，但格式化为001后写入实际上没必要，因为读取时会转换回整形）
    echo "$default_seq" > "$seq_file" || { echo "无法创建或写入序列号文件: $seq_file" >&2; exit 1; }
    current_seq=$default_seq  # 直接使用默认值作为当前序列号（整形）
else
    # 读取序列号文件内容并转换为整形数字（忽略非数字字符）
    raw_current_seq=$(cat "$seq_file" 2>/dev/null)
    if [[ "$raw_current_seq" =~ ([0-9]+) ]]; then
        current_seq=${BASH_REMATCH[1]}  # 提取匹配的数字部分作为当前序列号（整形）
    else
        # 如果文件内容不是有效的数字，则使用默认值并重置文件
        echo "警告：序列号文件包含非数字内容，将使用默认值 $default_seq 并重置文件。" >&2
        echo "$default_seq" > "$seq_file" || { echo "无法重置序列号文件: $seq_file" >&2; exit 1; }
        current_seq=$default_seq  # 使用默认值作为当前序列号（整形）
    fi
fi
 
# 检查日期是否一致
if [ "$file_date" != "$current_date" ]; then
    # 日期不一致，重置序列号为默认值（整形数字1，但逻辑上我们关心的是其值）
    new_seq=$default_seq
else
    # 日期一致，自增序列号
    new_seq=$((current_seq + 1))
fi
 
# 格式化新序列号为三位数（仅用于显示或写入文件时）
formatted_new_seq=$(printf "%03d" "$new_seq")
 
# 更新文件
echo "$new_seq" > "$seq_file" || { echo "无法写入序列号到文件: $seq_file" >&2; exit 1; }  # 注意这里写入的是整形数字，但读取时会转换回整形
echo "$current_date" > "$date_file" || { echo "无法写入日期到文件: $date_file" >&2; exit 1; }
 
 
# 输出信息（使用格式化后的序列号显示）
echo "序列号更新为: $formatted_new_seq"
echo "日期更新为: $current_date"


# 构建文件路径
JTL_FILE="${base_report_path}${current_date}-${formatted_new_seq}.jtl"
REPORT_DIR="${base_html_path}/latest_${current_date}-${formatted_new_seq}"
LOG_FILE="${base_log_path}${current_date}-${formatted_new_seq}.log"

echo "正在执行命令: \"$JMETER_HOME/bin/jmeter\" -n -t \"$JMX_FILE\" -l \"$JTL_FILE\" -e -o \"$REPORT_DIR\" -j \"$LOG_FILE\" -J$module -Jthread=$thread -Jruntime=$runtime"
# 运行JMeter命令
echo "$REPORT_DIR"
"$JMETER_HOME"/bin/jmeter -n -t $JMX_FILE -l $JTL_FILE -e -o $REPORT_DIR -j $LOG_FILE -J$module -Jthread=$thread -Jruntime=$runtime


#作为备份，保持最新的
echo "保留最新的HTML：cp -rfv $REPORT_DIR/* ${base_html_path}/latest"
cp -rfv $REPORT_DIR/* ${base_html_path}/latest



#存入CSV供集合html_index显示
current_datetime=$(date +"%Y-%m-%d %H:%M:%S")
html_index="http://jenkins.xxx.com/job/testing/job/Xm_Auto_Perf/ws/latest_${current_date}-${formatted_new_seq}/index.html"
echo "$current_datetime,$module,$html_index,completed" >> /data/jenkins-slave/workspace/testing/Xm_Auto_Perf/testPage/pageperformance_data.csv


# 检查JMeter命令的退出状态
if [ $? -eq 0 ]; then
    echo "JMeter 命令执行成功。"
    # 提示用户操作完成
    echo "JMeter 测试已完成。报告已生成在 $REPORT_DIR"
else
    echo "JMeter 命令执行失败。"
    exit 1
fi


#发送钉钉消息
curl --location --request POST 'https://oapi.dingtalk.com/robot/send?access_token=cxxxxx' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'Host: oapi.dingtalk.com' \
--header 'Connection: keep-alive' \
--data '{
    "msgtype": "markdown",
    "markdown": {
        "title": "🔧 压测执行报告",
        "text": "## <font color=\"#1890FF\">🔧 压测执行报告</font> \n\n**<font color=\"#52C41A\">📅 压测时间：</font>** '"$current_datetime"'  \n**<font color=\"#52C41A\">🌐 压测接口：</font>** '"$module"'  \n**<font color=\"#52C41A\">📊 接口详情：</font>** '"$html_index"'  \n**<font color=\"#52C41A\">📈 报告集合：</font>** http://jenkins.xxxxx.com/job/testing/job/Xm_Auto_Perf/ws/testPage/performance_report.html  \n\n**<font color=\"#FA8C16\">💡 测试概述：</font>** XmTest 测试 123  \n\n---\n\n### <font color=\"#722ED1\">📋 关键指标</font>\n- <font color=\"#333333\">**并发用户数：**</font> <font color=\"#13C2C2\">XXX</font>\n- <font color=\"#333333\">**平均响应时间：</font>** <font color=\"#13C2C2\">XXX ms</font>\n- <font color=\"#333333\">**错误率：**</font> <font color=\"#F5222D\">X.X%</font>\n- <font color=\"#333333\">**吞吐量：**</font> <font color=\"#52C41A\">XXX TPS</font>\n\n### <font color=\"#FA541C\">⚡ 优化建议</font>\n<font color=\"#666666\">[根据实际测试结果填写优化建议]</font>"
    }
}'